/*
* 入口
* */
const express = require("express");// 加载node.js应用框架
const swig = require("swig");// 处理缓存
const mongoose = require('mongoose');// 处理数据库
const bodyParser = require('body-parser');// 处理前端提交数据
const Cookies = require('cookies');// 处理cookies
const app = express();
const User = require('./models/User');// User对象单独处理用户情况

/*
* 项目配置
* */
// 设置静态文件托管
// 设置静态文件的默认访问路径，以public开头的url被解析时，直接返回dirname+public目录下的文件
app.use('/public',express.static(__dirname+'/public'));
// 配制应用模板
// swig是某个可以渲染的插件
app.engine('html',swig.renderFile);
// 模板目录设置
app.set('views','./views');
// 插件注册
app.set('view engine','html');
// 使用swig插件取消缓存
swig.setDefaults({cache:false});
// body-parser设置
/*
* （1）bodyParser.json(options)解析json格式（2）bodyParser.urlencoded(options)解析文本格式（3）bodyParser.raw(options)解析二进制（4）bodyParser.text(options)解析文本格式（仅字符串）
* */
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended:true}));
// cookies 设置
app.use(function (request,response,next) {
    request.cookies = new Cookies(request,response);
    request.userinfo = {};
    // 解析cookie
    if(request.cookies.get('userinfo')){
        try{
            request.userinfo = JSON.parse(request.cookies.get('userinfo'));

            // 判断是否为管理员
            User.findById(request.userinfo._id).then(function (data) {
                request.userinfo.isAdmin = Boolean(data.isAdmin);
                // console.log(request.userinfo.isAdmin +'app.js');
            });
            // console.log(request.userinfo +'app.js');
            next();
        }catch(e){
            next();
        }
    }else{
        next();
    }
});
/*
* 项目配置结束
* */

/*
* 划分模块
* */
app.use('/admin',require('./router/admin'));
app.use('/api',require('./router/api'));
app.use('/',require('./router/main'));
/*
* 划分模块结束
* */



/*
* 读取views目录下的文件。解析并返回客户端
* 第一个参数表示模板文件，相对于设置的目录而言
* */
// app.get('/',function (request,response,next) {
//     response.render('index');
// });
// 旧写法报错
// 数据库连接，数据库端口号：27017 （默认）
mongoose.connect("mongodb://localhost:27017/test",{ useNewUrlParser: true , useUnifiedTopology: true },function (err) {
    if(err){
        console.log('fail');
    }else{
        console.log('cg');
        app.listen(8080);
    }
});

